<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en-US">
<head>
<!-- GenHTML revision 25226-->
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Overview of the JMS API - The Java EE 6 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2011-03-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/javaeetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td width="400px"><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnaph.html">4.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="giepx.html">5.&nbsp;&nbsp;Introduction to Facelets</a></p>
<p class="toc level2"><a href="gjddd.html">6.&nbsp;&nbsp;Expression Language</a></p>
<p class="toc level2"><a href="bnaqz.html">7.&nbsp;&nbsp;Using JavaServer Faces Technology in Web Pages</a></p>
<p class="toc level2"><a href="gjcut.html">8.&nbsp;&nbsp;Using Converters, Listeners, and Validators</a></p>
<p class="toc level2"><a href="bnatx.html">9.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkmaa.html">10.&nbsp;&nbsp;JavaServer Faces Technology Advanced Concepts</a></p>
<p class="toc level2"><a href="bnawo.html">11.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="gkiow.html">12.&nbsp;&nbsp;Using Ajax with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkhxa.html">13.&nbsp;&nbsp;Advanced Composite Components</a></p>
<p class="toc level2"><a href="bnavg.html">14.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnafd.html">15.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnaxu.html">16.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="gijti.html">17.&nbsp;&nbsp;Introduction to Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">18.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="giepu.html">19.&nbsp;&nbsp;Building RESTful Web Services with JAX-RS</a></p>
<p class="toc level2"><a href="gjjxe.html">20.&nbsp;&nbsp;Advanced JAX-RS Features</a></p>
<p class="toc level2"><a href="gkojl.html">21.&nbsp;&nbsp;Running the Advanced JAX-RS Example Application</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijsz.html">22.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijre.html">23.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<p class="toc level2"><a href="gijrb.html">24.&nbsp;&nbsp;Running the Enterprise Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">25.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level2"><a href="gkcqz.html">26.&nbsp;&nbsp;Using the Embedded Enterprise Bean Container</a></p>
<p class="toc level2"><a href="gkidz.html">27.&nbsp;&nbsp;Using Asynchronous Method Invocation in Session Beans</a></p>
<p class="toc level1 tocsp"><a href="gjbnr.html">Part&nbsp;V&nbsp;Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="giwhb.html">28.&nbsp;&nbsp;Introduction to Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="gjbls.html">29.&nbsp;&nbsp;Running the Basic Contexts and Dependency Injection Examples</a></p>
<p class="toc level2"><a href="gjehi.html">30.&nbsp;&nbsp;Contexts and Dependency Injection for the Java EE Platform: Advanced Topics</a></p>
<p class="toc level2"><a href="gkhre.html">31.&nbsp;&nbsp;Running the Advanced Contexts and Dependency Injection Examples</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;VI&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">32.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="gijst.html">33.&nbsp;&nbsp;Running the Persistence Examples</a></p>
<p class="toc level2"><a href="bnbtg.html">34.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level2"><a href="gjitv.html">35.&nbsp;&nbsp;Using the Criteria API to Create Queries</a></p>
<p class="toc level2"><a href="gkjiq.html">36.&nbsp;&nbsp;Creating and Using String-Based Criteria Queries</a></p>
<p class="toc level2"><a href="gkjjf.html">37.&nbsp;&nbsp;Controlling Concurrent Access to Entity Data with Locking</a></p>
<p class="toc level2"><a href="gkjia.html">38.&nbsp;&nbsp;Improving the Performance of Java Persistence API Applications By Setting a Second-Level Cache</a></p>
<p class="toc level1 tocsp"><a href="gijrp.html">Part&nbsp;VII&nbsp;Security</a></p>
<p class="toc level2"><a href="bnbwj.html">39.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bncas.html">40.&nbsp;&nbsp;Getting Started Securing Web Applications</a></p>
<p class="toc level2"><a href="bnbyk.html">41.&nbsp;&nbsp;Getting Started Securing Enterprise Applications</a></p>
<p class="toc level1 tocsp"><a href="gijue.html">Part&nbsp;VIII&nbsp;Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="gijto.html">42.&nbsp;&nbsp;Introduction to Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="bncih.html">43.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">44.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncdq.html">45.&nbsp;&nbsp;Java Message Service Concepts</a></p>
<div id="scrolltoc" class="onpage">
<p class="toc level3"><a href="">Overview of the JMS API</a></p>
<p class="toc level4"><a href="#bncds">What Is Messaging?</a></p>
<p class="toc level4"><a href="#bncdt">What Is the JMS API?</a></p>
<p class="toc level4"><a href="#bncdu">When Can You Use the JMS API?</a></p>
<p class="toc level4"><a href="#bncdw">How Does the JMS API Work with the Java EE Platform?</a></p>
</div>
<p class="toc level3 tocsp"><a href="bncdx.html">Basic JMS API Concepts</a></p>
<p class="toc level4"><a href="bncdx.html#bncdy">JMS API Architecture</a></p>
<p class="toc level4"><a href="bncdx.html#bncea">Messaging Domains</a></p>
<p class="toc level5"><a href="bncdx.html#bnceb">Point-to-Point Messaging Domain</a></p>
<p class="toc level5"><a href="bncdx.html#bnced">Publish/Subscribe Messaging Domain</a></p>
<p class="toc level5"><a href="bncdx.html#bncef">Programming with the Common Interfaces</a></p>
<p class="toc level4 tocsp"><a href="bncdx.html#bnceg">Message Consumption</a></p>
<p class="toc level3 tocsp"><a href="bnceh.html">The JMS API Programming Model</a></p>
<p class="toc level4"><a href="bnceh.html#bncej">JMS Administered Objects</a></p>
<p class="toc level5"><a href="bnceh.html#bncek">JMS Connection Factories</a></p>
<p class="toc level5"><a href="bnceh.html#bncel">JMS Destinations</a></p>
<p class="toc level4 tocsp"><a href="bnceh.html#bncem">JMS Connections</a></p>
<p class="toc level4"><a href="bnceh.html#bncen">JMS Sessions</a></p>
<p class="toc level4"><a href="bnceh.html#bnceo">JMS Message Producers</a></p>
<p class="toc level4"><a href="bnceh.html#bncep">JMS Message Consumers</a></p>
<p class="toc level5"><a href="bnceh.html#bnceq">JMS Message Listeners</a></p>
<p class="toc level5"><a href="bnceh.html#bncer">JMS Message Selectors</a></p>
<p class="toc level4 tocsp"><a href="bnceh.html#bnces">JMS Messages</a></p>
<p class="toc level5"><a href="bnceh.html#bncet">Message Headers</a></p>
<p class="toc level5"><a href="bnceh.html#bncev">Message Properties</a></p>
<p class="toc level5"><a href="bnceh.html#bncew">Message Bodies</a></p>
<p class="toc level4 tocsp"><a href="bnceh.html#bncey">JMS Queue Browsers</a></p>
<p class="toc level4"><a href="bnceh.html#bncez">JMS Exception Handling</a></p>
<p class="toc level3 tocsp"><a href="bncfu.html">Creating Robust JMS Applications</a></p>
<p class="toc level4"><a href="bncfu.html#bncfv">Using Basic Reliability Mechanisms</a></p>
<p class="toc level5"><a href="bncfu.html#bncfw">Controlling Message Acknowledgment</a></p>
<p class="toc level5"><a href="bncfu.html#bncfy">Specifying Message Persistence</a></p>
<p class="toc level5"><a href="bncfu.html#bncfz">Setting Message Priority Levels</a></p>
<p class="toc level5"><a href="bncfu.html#bncga">Allowing Messages to Expire</a></p>
<p class="toc level5"><a href="bncfu.html#bncgb">Creating Temporary Destinations</a></p>
<p class="toc level4 tocsp"><a href="bncfu.html#bncgc">Using Advanced Reliability Mechanisms</a></p>
<p class="toc level5"><a href="bncfu.html#bncgd">Creating Durable Subscriptions</a></p>
<p class="toc level5"><a href="bncfu.html#bncgh">Using JMS API Local Transactions</a></p>
<p class="toc level3 tocsp"><a href="bncgl.html">Using the JMS API in Java EE Applications</a></p>
<p class="toc level4"><a href="bncgl.html#bncgm">Using <tt>@Resource</tt> Annotations in Enterprise Bean or Web Components</a></p>
<p class="toc level4"><a href="bncgl.html#bncgn">Using Session Beans to Produce and to Synchronously Receive Messages</a></p>
<p class="toc level5"><a href="bncgl.html#bncgo">Resource Management</a></p>
<p class="toc level5"><a href="bncgl.html#bncgp">Transactions</a></p>
<p class="toc level4 tocsp"><a href="bncgl.html#bncgq">Using Message-Driven Beans to Receive Messages Asynchronously</a></p>
<p class="toc level4"><a href="bncgl.html#bncgs">Managing Distributed Transactions</a></p>
<p class="toc level4"><a href="bncgl.html#bncgt">Using the JMS API with Application Clients and Web Components</a></p>
<p class="toc level3 tocsp"><a href="bncgu.html">Further Information about JMS</a></p>
<p class="toc level2 tocsp"><a href="bncgv.html">46.&nbsp;&nbsp;Java Message Service Examples</a></p>
<p class="toc level2"><a href="gkahp.html">47.&nbsp;&nbsp;Advanced Bean Validation Concepts and Examples</a></p>
<p class="toc level2"><a href="gkeed.html">48.&nbsp;&nbsp;Using Java EE Interceptors</a></p>
<p class="toc level1 tocsp"><a href="gkgjw.html">Part&nbsp;IX&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="gkaee.html">49.&nbsp;&nbsp;Duke's Tutoring Case Study Example</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td>
         <div class="header">
             <div class="banner">
                <table width="100%" border="0" cellpadding="5" cellspacing="0">
                   <tbody>
                      <tr>
                         <td valign="bottom"><p class="Banner">The Java EE 6 Tutorial
</p></td>
                         <td align="right"  valign="bottom"><img src="graphics/javalogo.png" alt="Java Coffee Cup logo"></td>
                      </tr>
                   </tbody>
                </table>
             </div>

             <div class="header-links">
	         <a href="./index.html">Home</a> | 
<a href="../information/download.html">Download</a> | 
<a href="./javaeetutorial6.pdf">PDF</a> | 
<a href="../information/faq.html">FAQ</a> | 
<a href="http://download.oracle.com/javaee/feedback.htm">Feedback</a>

             </div>
             <div class="navigation">
                 <a href="bncdq.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
                 <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
                 <a href="bncdx.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             

<a name="bncdr"></a><h2>Overview of the JMS API</h2>
<a name="indexterm-2300"></a><p>This overview of the JMS API answers the following questions.</p>


<ul><li><p><a href="#bncds">What Is Messaging?</a></p>

</li>
<li><p><a href="#bncdt">What Is the JMS API?</a></p>

</li>
<li><p><a href="#bncdu">When Can You Use the JMS API?</a></p>

</li>
<li><p><a href="#bncdw">How Does the JMS API Work with the Java EE Platform?</a></p>

</li></ul>


<a name="bncds"></a><h3>What Is Messaging?</h3>
<a name="indexterm-2301"></a><a name="indexterm-2302"></a><p>Messaging is a method of communication between software components or applications. A messaging
system is a peer-to-peer facility: A messaging client can send messages to, and
receive messages from, any other client. Each client connects to a messaging agent
that provides facilities for creating, sending, receiving, and reading messages.</p>

<p>Messaging enables distributed communication that is <b>loosely coupled</b>. A component sends a message
to a destination, and the recipient can retrieve the message from the destination.
However, the sender and the receiver do not have to be available at
the same time in order to communicate. In fact, the sender does not
need to know anything about the receiver; nor does the receiver need to
know anything about the sender. The sender and the receiver need to know
only which message format and which destination to use. In this respect, messaging
differs from tightly coupled technologies, such as Remote Method Invocation (RMI), which require
an application to know a remote application&rsquo;s methods.</p>

<p>Messaging also differs from electronic mail (email), which is a method of communication
between people or between software applications and people. Messaging is used for communication
between software applications or software components.</p>



<a name="bncdt"></a><h3>What Is the JMS API?</h3>
<a name="indexterm-2303"></a><p>The Java Message Service is a Java API that allows applications to
create, send, receive, and read messages. Designed by Sun and several partner companies, the
JMS API defines a common set of interfaces and associated semantics that allow
programs written in the Java programming language to communicate with other messaging implementations.</p>

<p>The JMS API minimizes the set of concepts a programmer must learn
in order to use messaging products but provides enough features to support sophisticated messaging
applications. It also strives to maximize the portability of JMS applications across JMS
providers in the same messaging domain.</p>

<p>The JMS API enables communication that is not only loosely coupled but also</p>


<ul><li><p><b>Asynchronous</b>: A JMS provider can deliver messages to a client as they arrive; a client does not have to request messages in order to receive them.</p>

</li>
<li><p><b>Reliable</b>: The JMS API can ensure that a message is delivered once and only once. Lower levels of reliability are available for applications that can afford to miss messages or to receive duplicate messages.</p>

</li></ul>
<p>The JMS specification was first published in August 1998. The latest version is
Version 1.1, which was released in April 2002. You can download a copy
of the specification from the JMS web site: <a href="http://www.oracle.com/technetwork/java/index-jsp-142945.html">http://www.oracle.com/technetwork/java/index-jsp-142945.html</a>.</p>



<a name="bncdu"></a><h3>When Can You Use the JMS API?</h3>
<p>An enterprise application provider is likely to choose a messaging API over a
tightly coupled API, such as remote procedure call (RPC), under the following circumstances.</p>


<ul><li><p>The provider wants the components not to depend on information about other components&rsquo; interfaces, so that components can be easily replaced.</p>

</li>
<li><p>The provider wants the application to run whether or not all components are up and running simultaneously.</p>

</li>
<li><p>The application business model allows a component to send information to another and to continue to operate without receiving an immediate response.</p>

</li></ul>
<p>For example, components of an enterprise application for an automobile manufacturer can use
the JMS API in situations like these:</p>


<ul><li><p>The inventory component can send a message to the factory component when the inventory level for a product goes below a certain level so that the factory can make more cars.</p>

</li>
<li><p>The factory component can send a message to the parts components so that the factory can assemble the parts it needs.</p>

</li>
<li><p>The parts components in turn can send messages to their own inventory and order components to update their inventories and to order new parts from suppliers.</p>

</li>
<li><p>Both the factory and the parts components can send messages to the accounting component to update their budget numbers.</p>

</li>
<li><p>The business can publish updated catalog items to its sales force.</p>

</li></ul>
<p>Using messaging for these tasks allows the various components to interact with one
another efficiently, without tying up network or other resources. <a href="#bncdv">Figure&nbsp;45-1</a> illustrates how
this simple example might work.</p>

<a name="bncdv"></a><p class="caption">Figure&nbsp;45-1 Messaging in an Enterprise Application</p><img src="figures/jms-msgEnterpriseApp.gif" alt="Diagram showing messaging between various departments in an enterprise"></img><p>Manufacturing is only one example of how an enterprise can use the
JMS API. Retail applications, financial services applications, health services applications, and many others can
make use of messaging.</p>



<a name="bncdw"></a><h3>How Does the JMS API Work with the Java EE Platform?</h3>
<a name="indexterm-2304"></a><a name="indexterm-2305"></a><p>When the JMS API was introduced in 1998, its most important purpose was
to allow Java applications to access existing messaging-oriented middleware (MOM) systems, such as
MQSeries from IBM. Since that time, many vendors have adopted and implemented the
JMS API, so a JMS product can now provide a complete messaging capability
for an enterprise.</p>

<p>Beginning with the 1.3 release of the Java EE platform, the JMS
API has been an integral part of the platform, and application developers can use
messaging with Java EE components.</p>

<p>The JMS API in the Java EE platform has the following features.</p>


<ul><li><p>Application clients, Enterprise JavaBeans (EJB) components, and web components can send or synchronously receive a JMS message. Application clients can in addition receive JMS messages asynchronously. (Applets, however, are not required to support the JMS API.)</p>

</li>
<li><p>Message-driven beans, which are a kind of enterprise bean, enable the asynchronous consumption of messages. A JMS provider can optionally implement concurrent processing of messages by message-driven beans.</p>

</li>
<li><p>Message send and receive operations can participate in distributed transactions, which allow JMS operations and database accesses to take place within a single transaction.</p>

</li></ul>
<p>The JMS API enhances the Java EE platform by simplifying enterprise development, allowing
loosely coupled, reliable, asynchronous interactions among Java EE components and legacy systems capable
of messaging. A developer can easily add new behavior to a Java EE
application that has existing business events by adding a new message-driven bean to
operate on specific business events. The Java EE platform, moreover, enhances the JMS
API by providing support for distributed transactions and allowing for the concurrent consumption of
messages. For more information, see the Enterprise JavaBeans specification, v3.1.</p>

<p>The JMS provider can be integrated with the application server using the Java
EE Connector architecture. You access the JMS provider through a resource adapter. This
capability allows vendors to create JMS providers that can be plugged in to
multiple application servers, and it allows application servers to support multiple JMS providers.
For more information, see the Java EE Connector architecture specification, v1.6.</p>


         </div>
         <div class="navigation">
             <a href="bncdq.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
             <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
             <a href="bncdx.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
         </div>

         <div class="copyright">
      	    <p>Copyright &copy; 2011, Oracle and/or its affiliates. All rights reserved. <a href="docinfo.html">Legal Notices</a></p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

